home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 1.iso / toolbox / src / demos / OpenGL / insect / parts.c < prev    next >
C/C++ Source or Header  |  1996-11-11  |  15KB  |  1,005 lines

  1. /*
  2.  * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
  3.  * ALL RIGHTS RESERVED 
  4.  * Permission to use, copy, modify, and distribute this software for 
  5.  * any purpose and without fee is hereby granted, provided that the above
  6.  * copyright notice appear in all copies and that both the copyright notice
  7.  * and this permission notice appear in supporting documentation, and that 
  8.  * the name of Silicon Graphics, Inc. not be used in advertising
  9.  * or publicity pertaining to distribution of the software without specific,
  10.  * written prior permission. 
  11.  *
  12.  * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
  13.  * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
  14.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
  15.  * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
  16.  * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
  17.  * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
  18.  * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
  19.  * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
  20.  * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
  21.  * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
  22.  * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
  23.  * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
  24.  * 
  25.  * US Government Users Restricted Rights 
  26.  * Use, duplication, or disclosure by the Government is subject to
  27.  * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
  28.  * (c)(1)(ii) of the Rights in Technical Data and Computer Software
  29.  * clause at DFARS 252.227-7013 and/or in similar or successor
  30.  * clauses in the FAR or the DOD or NASA FAR Supplement.
  31.  * Unpublished-- rights reserved under the copyright laws of the
  32.  * United States.  Contractor/manufacturer is Silicon Graphics,
  33.  * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
  34.  *
  35.  * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
  36.  */
  37. #include <stdio.h>
  38. #include <math.h>
  39. #include <GL/gl.h>
  40. #include <GL/glu.h>
  41. #include "gl42ogl.h"
  42. #include "tk.h"
  43. #include "insect.h"
  44. #include "insectco.h"
  45.  
  46. #define BLACK 0
  47.  
  48. /* For ECLIPSE 8 bit machine */    
  49. extern GLboolean is_8bit;
  50.  
  51. GLuint screen,viewit,shadow,body,hip[6],thigh[6],shin[6],kneeball[6];
  52. GLuint body_shadow,hip_shadow,thigh_shadow,shin_shadow,kneeball_shadow;
  53.  
  54. GLfloat k2[6][3];
  55. GLfloat k3[6][3];
  56. GLfloat b7[12][3];
  57. GLfloat b8[12][3];
  58. GLint scr[4][2];
  59.  
  60. GLfloat b1[4][3] = {
  61.     {
  62.     R1 * SIN30 * -SIN15,
  63.         R1 * SIN30 * COS15,
  64.         R1 * COS30
  65.     },
  66.  
  67.     {
  68.     R1 * SIN30 * SIN15,
  69.         R1 * SIN30 * COS15,
  70.         R1 * COS30
  71.     },
  72.  
  73.     {
  74.     A2 * SIN30,
  75.         A1,
  76.         A2 * COS30
  77.     },
  78.  
  79.     {
  80.     -A2 * SIN30,
  81.         A1,
  82.         A2 * COS30
  83.     }
  84. };
  85.  
  86. GLfloat b4[4][3] = {
  87.     {
  88.     R1 * SIN30 * -SIN15,
  89.         R1 * SIN30 * COS15,
  90.         -R1 * COS30
  91.     },
  92.  
  93.     {
  94.     -A2 * SIN30,
  95.         A1,
  96.         -A2 * COS30
  97.     },
  98.  
  99.     {
  100.     A2 * SIN30,
  101.         A1,
  102.         -A2 * COS30
  103.     },
  104.  
  105.     {
  106.     R1 * SIN30 * SIN15,
  107.         R1 * SIN30 * COS15,
  108.         -R1 * COS30
  109.     }
  110. };
  111.  
  112. GLfloat b2[4][3] = {{
  113.     R1 * SIN30 * -SIN45,
  114.         R1 * SIN30 * COS45,
  115.         R1 * COS30
  116. },
  117.  
  118. {
  119.     R1 * SIN30 * -SIN15,
  120.     R1 * SIN30 * COS15,
  121.     R1 * COS30
  122. },
  123.  
  124. {
  125.     -A2 * SIN30,
  126.     A1,
  127.     A2 * COS30
  128. },
  129.  
  130. {
  131.     (A2 * SIN30) * COS60 - A1 * SIN60,
  132.     A1 * COS60 + (A2 * SIN30) * SIN60,
  133.     A2 * COS30
  134. }
  135. };
  136.  
  137. GLfloat b5[4][3] = {{
  138.     R1 * SIN30 * -SIN45,
  139.         R1 * SIN30 * COS45,
  140.         -R1 * COS30
  141. },
  142.  
  143. {
  144.     (A2 * SIN30) * COS60 - A1 * SIN60,
  145.     A1 * COS60 + (A2 * SIN30) * SIN60,
  146.     -A2 * COS30
  147. },
  148.  
  149. {
  150.     -A2 * SIN30,
  151.     A1,
  152.     -A2 * COS30
  153. },
  154.  
  155. {
  156.     R1 * SIN30 * -SIN15,
  157.     R1 * SIN30 * COS15,
  158.     -R1 * COS30
  159. }
  160. };
  161.  
  162. GLfloat b3[4][3] = {{
  163.     (A2 * SIN30) * COS60 - A1 * SIN60,
  164.         A1 * COS60 + (A2 * SIN30) * SIN60,
  165.         A2 * COS30
  166. },
  167.  
  168. {
  169.     -A2 * SIN30,
  170.     A1,
  171.     A2 * COS30
  172. },
  173.  
  174. {
  175.     -A2,
  176.     A1,
  177.     0
  178. },
  179.  
  180. {
  181.     (A2) * COS60 - A1 * SIN60,
  182.     A1 * COS60 + (A2) * SIN60,
  183.     0
  184. }
  185. };
  186.  
  187. GLfloat b6[4][3] = {{
  188.     (A2 * SIN30) * COS60 - A1 * SIN60,
  189.         A1 * COS60 + (A2 * SIN30) * SIN60,
  190.         -A2 * COS30
  191. },
  192.  
  193. {
  194.     (A2) * COS60 - A1 * SIN60,
  195.     A1 * COS60 + (A2) * SIN60,
  196.     0.0
  197. },
  198.  
  199. {
  200.     -A2,
  201.     A1,
  202.     0.0
  203. },
  204.  
  205. {
  206.     -A2 * SIN30,
  207.     A1,
  208.     -A2 * COS30
  209. }
  210. };
  211.  
  212. GLfloat h1[4][3] = {{
  213.     A2, -A2, 0.0
  214. },
  215.  
  216. {
  217.     R2, 0.0, 0.0
  218. },
  219.  
  220. {
  221.     R2 * COS60,
  222.     0,
  223.     R2 * SIN60
  224. },
  225.  
  226. {
  227.     A2 * COS60,
  228.     -A2,
  229.     A2 * SIN60
  230. }
  231.  
  232. };
  233.  
  234. GLfloat h2[4][3] = {{
  235.     R2 * COS60,
  236.         0.0,
  237.         R2 * SIN60
  238. },
  239.  
  240. {
  241.     R2, 0.0, 0.0
  242. },
  243.  
  244. {
  245.     A2, A2, 0.0
  246. },
  247.  
  248. {
  249.     A2 * COS60,
  250.     A2,
  251.     A2 * SIN60
  252. }
  253. };
  254.  
  255. GLfloat h3[3][3] = {{
  256.     A2, A2, 0.0
  257. },
  258.  
  259. {
  260.     0.0, R2, 0.0
  261. },
  262.  
  263. {
  264.     A2 * COS60,
  265.     A2,
  266.     A2 * SIN60
  267. },
  268. };
  269.  
  270. GLfloat t1[4][3] = {{
  271.     -A2 * COS60,
  272.         A2,
  273.         A2 * SIN60
  274. },
  275.  
  276. {
  277.     A2 * COS60,
  278.     A2,
  279.     A2 * SIN60
  280. },
  281.  
  282. {
  283.     A2 * COS60,
  284.     1 - A2 * COS60,
  285.     A2 * SIN60
  286. },
  287.  
  288. {
  289.     -A2 * COS60,
  290.     1 - A2 * COS60,
  291.     A2 * SIN60
  292. }
  293. };
  294.  
  295. GLfloat t2[3][3] = {{
  296.     -A2 * COS60,
  297.         A2,
  298.         A2 * SIN60
  299. },
  300.  
  301. {
  302.     -A2 * COS60,
  303.     1 - A2 * COS60,
  304.     A2 * SIN60
  305. },
  306.  
  307. {
  308.     -A2,
  309.     A2,
  310.     0.0
  311. }
  312. };
  313.  
  314. GLfloat t6[3][3] = {{
  315.     -A2 * COS60,
  316.         A2,
  317.         -A2 * SIN60
  318. },
  319.  
  320. {
  321.     -A2,
  322.     A2,
  323.     0.0
  324. },
  325.  
  326. {
  327.     -A2 * COS60,
  328.     1 - A2,
  329.     0.0
  330. }
  331.  
  332. };
  333.  
  334. GLfloat t3[3][3] = {{
  335.     A2 * COS60,
  336.         A2,
  337.         A2 * SIN60
  338. },
  339.  
  340. {
  341.     A2,
  342.     A2,
  343.     0.0
  344. },
  345.  
  346. {
  347.     A2 * COS60,
  348.     1 - A2 * COS60,
  349.     A2 * SIN60
  350. }
  351. };
  352.  
  353. GLfloat t7[3][3] = {{
  354.     A2 * COS60,
  355.         A2,
  356.         -A2 * SIN60
  357. },
  358.  
  359. {
  360.     A2 * COS60,
  361.     1 - A2,
  362.     0.0
  363. },
  364.  
  365. {
  366.     A2,
  367.     A2,
  368.     0.0
  369. }
  370. };
  371.  
  372. GLfloat t4[3][3] = {{
  373.     -A2 * COS60,
  374.         1.0 - A2 * COS60,
  375.         A2 * SIN60
  376. },
  377.  
  378. {
  379.     -A2 * COS60,
  380.     1.0 - A2,
  381.     0.0
  382. },
  383.  
  384. {
  385.     -A2,
  386.     A2,
  387.     0.0
  388. }
  389. };
  390.  
  391. GLfloat t5[3][3] = {{
  392.     A2 * COS60,
  393.         1.0 - A2 * COS60,
  394.         A2 * SIN60
  395. },
  396.  
  397. {
  398.     A2,
  399.     A2,
  400.     0.0
  401. },
  402.  
  403. {
  404.     A2 * COS60,
  405.     1 - A2,
  406.     0.0
  407. }
  408. };
  409.  
  410. GLfloat t8[4][3] = {{
  411.     A2 * COS60,
  412.         A2,
  413.         -A2 * SIN60
  414. },
  415.  
  416. {
  417.     -A2 * COS60,
  418.     A2,
  419.     -A2 * SIN60
  420. },
  421.  
  422. {
  423.     -A2 * COS60,
  424.     1 - A2,
  425.     0.0
  426. },
  427.  
  428. {
  429.     A2 * COS60,
  430.     1 - A2,
  431.     0.0
  432. }
  433. };
  434.  
  435. GLfloat s1[4][3] = {{
  436.     A2 * COS60,
  437.         -A2 * COS60,
  438.         -A2 * SIN60
  439. },
  440.  
  441. {
  442.     A2 * COS60 * 0.4,
  443.     A2 * COS60 - 2.0,
  444.     -A2 * SIN60 * 0.4
  445. },
  446.  
  447. {
  448.     -A2 * COS60 * 0.4,
  449.     A2 * COS60 - 2.0,
  450.     -A2 * SIN60 * 0.4
  451. },
  452.  
  453. {
  454.     -A2 * COS60,
  455.     -A2 * COS60,
  456.     -A2 * SIN60
  457. }
  458.  
  459. };
  460.  
  461. GLfloat s2[4][3] = {{
  462.     A2 * COS60,
  463.         -A2 * COS60,
  464.         -A2 * SIN60
  465. },
  466.  
  467. {
  468.     A2 * COS60,
  469.     -A2,
  470.     0.0
  471. },
  472.  
  473. {
  474.     A2 * COS60 * 0.4,
  475.     -2.0,
  476.     0.0
  477. },
  478.  
  479. {
  480.     A2 * COS60 * 0.4,
  481.     A2 * COS60 - 2.0,
  482.     -A2 * SIN60 * 0.4
  483. }
  484.  
  485. };
  486.  
  487. GLfloat s3[4][3] = {{
  488.     -A2 * COS60,
  489.         -A2 * COS60,
  490.         -A2 * SIN60
  491. },
  492.  
  493. {
  494.     -A2 * COS60 * 0.4,
  495.     A2 * COS60 - 2.0,
  496.     -A2 * SIN60 * 0.4
  497. },
  498.  
  499. {
  500.     -A2 * COS60 * 0.4,
  501.     -2.0,
  502.     0.0
  503. },
  504.  
  505. {
  506.     -A2 * COS60,
  507.     -A2,
  508.     0.0
  509. }
  510.  
  511. };
  512.  
  513. GLfloat s4[4][3] = {{
  514.     A2 * COS60,
  515.         -A2,
  516.         0.0
  517. },
  518.  
  519. {
  520.     -A2 * COS60,
  521.     -A2,
  522.     0.0
  523. },
  524.  
  525. {
  526.     -A2 * COS60 * 0.4,
  527.     -2.0,
  528.     0.0
  529. },
  530.  
  531. {
  532.     A2 * COS60 * 0.4,
  533.     -2.0,
  534.     0.0
  535. }
  536.  
  537. };
  538.  
  539. GLfloat s5[4][3] = {{
  540.     A2 * COS60 * 0.4,
  541.         -2.0,
  542.         0.0
  543. },
  544.  
  545. {
  546.     -A2 * COS60 * 0.4,
  547.     -2.0,
  548.     0.0
  549. },
  550.  
  551. {
  552.     -A2 * COS60 * 0.4,
  553.     A2 * COS60 - 2.0,
  554.     -A2 * SIN60 * 0.4
  555. },
  556.  
  557. {
  558.     A2 * COS60 * 0.4,
  559.     A2 * COS60 - 2.0,
  560.     -A2 * SIN60 * 0.4
  561. }
  562. };
  563.  
  564. GLfloat k1[4][3] = {{
  565.     -A2 * COS60,
  566.         1.0 - A2 * COS60,
  567.         A2 * SIN60
  568. },
  569.  
  570. {
  571.     A2 * COS60,
  572.     1.0 - A2 * COS60,
  573.     A2 * SIN60
  574. },
  575.  
  576. {
  577.     A2 * COS60,
  578.     1.0 + A2 * COS60,
  579.     A2 * SIN60
  580. },
  581.  
  582. {
  583.     -A2 * COS60,
  584.     1.0 + A2 * COS60,
  585.     A2 * SIN60
  586. }
  587. };
  588.  
  589. /*    make display list objects
  590.     screen -- for checkerboard floor
  591.     shadow -- matrix to project insect onto flat surface
  592.     viewit -- viewing transformation
  593.     and various parts of the body and their shadows
  594. */
  595.  
  596. void
  597. doViewit (void) {
  598. /*
  599.     glFrustum (-8.0, 8.0, -8.0 * 0.75, 8.0 * 0.75, 10.0, 135.0);
  600.     guPerspective (viewitFOV, viewitASPECT, 0.01, 131072.);
  601. */
  602.     glRotatef (ctheta/10, 1, 0, 0);
  603.     glRotatef (cphi/10, 0, 0, 1);
  604.     glTranslatef (cx, cy, cz);
  605. }
  606.  
  607.  
  608.  
  609. void
  610. createobjects (void) {
  611.     int     i,
  612.             j,
  613.             k;
  614.  
  615.     screen = glGenLists(32);
  616.     if (screen == 0) tkQuit();
  617.  
  618.     shadow = screen + 1;
  619.     body = screen + 2;
  620.     body_shadow = screen + 3;
  621.     /* hip   [4..9]
  622.      * thigh [10..15]
  623.      * knee  [16..21]
  624.      * shin  [22..27]
  625.      */
  626.     hip[0] = screen + 4;
  627.     thigh[0] = screen + 10;
  628.     kneeball[0] = screen + 16;
  629.     shin[0] = screen + 22;
  630.     hip_shadow = screen + 28;
  631.     thigh_shadow = screen + 29;
  632.     kneeball_shadow = screen + 30;
  633.     shin_shadow = screen + 31;
  634.     
  635.         
  636.  
  637.     glNewList (screen, GL_COMPILE);
  638.  
  639.     glShadeModel(GL_FLAT);
  640.  
  641. /* Changed for ECLIPSE 8 bit machine */
  642.     if (is_8bit)
  643.     glIndexi (ECLIPSE8_GRID);
  644.     else
  645.     glIndexi (GRID);
  646.  
  647.     k = 1;
  648.     for (i = -8; i < 7; i++)
  649.     for (j = -8; j < 7; j++) {
  650.         if (k == 0) {
  651.         scr[0][0] = i * 3;
  652.         scr[0][1] = j * 3;
  653.         scr[1][0] = (i + 1) * 3;
  654.         scr[1][1] = j * 3;
  655.         scr[2][0] = (i + 1) * 3;
  656.         scr[2][1] = (j + 1) * 3;
  657.         scr[3][0] = i * 3;
  658.         scr[3][1] = (j + 1) * 3;
  659.         polf2i (4, scr);
  660.         }
  661.         k = 1 - k;
  662.     }
  663.     glEndList ();
  664.  
  665.  
  666.     glNewList (shadow, GL_COMPILE);
  667.  
  668.     glShadeModel(GL_FLAT);
  669.  
  670.     {
  671.     float   sx,
  672.             sy,
  673.             sz;
  674.     GLfloat mshadow[16];
  675.     sx = -1.0;
  676.     sy = -1.0;
  677.     sz = 1.0;
  678.     gl_IdentifyMatrix (mshadow);
  679. /*
  680.     mshadow[2][0] = -sx / sz;
  681.     mshadow[2][1] = -sy / sz;
  682.     mshadow[2][2] = 0.;
  683. */
  684.           mshadow[8] = -sx / sz;
  685.      mshadow[9] = -sy / sz;
  686.     mshadow[10] = 0;
  687.     glMultMatrixf (mshadow);
  688.     }
  689.     glIndexi (BLACK);
  690.     glEndList ();
  691.  
  692.     for (i = 0; i < 12; i++) {
  693.     b7[i][2] = R1 * SIN60;
  694.     b7[i][0] = R1 * COS60 * cos ((float) i * (PI / 6.0) + (PI / 12.0));
  695.     b7[i][1] = R1 * COS60 * sin ((float) i * (PI / 6.0) + (PI / 12.0));
  696.     b8[11 - i][2] = -R1 * SIN60;
  697.     b8[11 - i][0] = R1 * COS60 * cos ((float) i * (PI / 6.0) + (PI / 12.0));
  698.     b8[11 - i][1] = R1 * COS60 * sin ((float) i * (PI / 6.0) + (PI / 12.0));
  699.     }
  700.  
  701.     for (i = 0; i < 6; i++) {
  702.     k2[i][0] = A2 * COS60;
  703.     k2[i][1] = A2 * cos ((float) i * (PI / 3.0)) + 1.0;
  704.     k2[i][2] = A2 * sin ((float) i * (PI / 3.0));
  705.     k3[5 - i][0] = -A2 * COS60;
  706.     k3[5 - i][1] = A2 * cos ((float) i * (PI / 3.0)) + 1.0;
  707.     k3[5 - i][2] = A2 * sin ((float) i * (PI / 3.0));
  708.     }
  709.  
  710.     glNewList (body, GL_COMPILE);
  711.  
  712.     glShadeModel(GL_FLAT);
  713.     glEnable (GL_CULL_FACE);
  714.  
  715.     getpolycolor (0, b7);
  716.     polf (12, b7);
  717.     getpolycolor (0, b8);
  718.     polf (12, b8);
  719.     getpolycolor (0, b1);
  720.     polf (4, b1);
  721.     getpolycolor (0, b2);
  722.     polf (4, b2);
  723.     getpolycolor (0, b3);
  724.     polf (4, b3);
  725.     getpolycolor (0, b4);
  726.     polf (4, b4);
  727.     getpolycolor (0, b5);
  728.     polf (4, b5);
  729.     getpolycolor (0, b6);
  730.     polf (4, b6);
  731.     for (i = 0; i < 5; i++) {
  732.     rotate60 ('z', 4, b1);
  733.     rotate60 ('z', 4, b2);
  734.     rotate60 ('z', 4, b3);
  735.     rotate60 ('z', 4, b4);
  736.     rotate60 ('z', 4, b5);
  737.     rotate60 ('z', 4, b6);
  738.     getpolycolor (0, b1);
  739.     polf (4, b1);
  740.     getpolycolor (0, b2);
  741.     polf (4, b2);
  742.     getpolycolor (0, b3);
  743.     polf (4, b3);
  744.     getpolycolor (0, b4);
  745.     polf (4, b4);
  746.     getpolycolor (0, b5);
  747.     polf (4, b5);
  748.     getpolycolor (0, b6);
  749.     polf (4, b6);
  750.     }
  751.  
  752.     glDisable (GL_CULL_FACE);
  753.  
  754.  
  755.     glEndList ();
  756.  
  757.     glNewList (body_shadow, GL_COMPILE);
  758.  
  759.     glShadeModel(GL_FLAT);
  760.  
  761.     glIndexi (SHADOW_COLOR);
  762.     if (lit (3, b7))
  763.     polf (12, b7);
  764.     if (lit (3, b1))
  765.     polf (4, b1);
  766.     if (lit (3, b2))
  767.     polf (4, b2);
  768.     if (lit (3, b3))
  769.     polf (4, b3);
  770.     if (lit (3, b4))
  771.     polf (4, b4);
  772.     if (lit (3, b5))
  773.     polf (4, b5);
  774.     if (lit (3, b6))
  775.     polf (4, b6);
  776.     for (i = 0; i < 5; i++) {
  777.     rotate60 ('z', 4, b1);
  778.     rotate60 ('z', 4, b2);
  779.     rotate60 ('z', 4, b3);
  780.     rotate60 ('z', 4, b4);
  781.     rotate60 ('z', 4, b5);
  782.     rotate60 ('z', 4, b6);
  783.     if (lit (3, b1))
  784.         polf (4, b1);
  785.     if (lit (3, b2))
  786.         polf (4, b2);
  787.     if (lit (3, b3))
  788.         polf (4, b3);
  789.     if (lit (3, b4))
  790.         polf (4, b4);
  791.     if (lit (3, b5))
  792.         polf (4, b5);
  793.     if (lit (3, b6))
  794.         polf (4, b6);
  795.     }
  796.     glEndList ();
  797.  
  798.     for (j = 0; j < 6; j++) {
  799.      hip[j] = hip[0] + j;
  800.     glNewList (hip[j], GL_COMPILE);
  801.  
  802.     glShadeModel(GL_FLAT);
  803.  
  804.     glEnable (GL_CULL_FACE);
  805.  
  806.     getpolycolor (1, h1);
  807.     polf (4, h1);
  808.     getpolycolor (1, h2);
  809.     polf (4, h2);
  810.     getpolycolor (1, h3);
  811.     polf (3, h3);
  812.     for (i = 0; i < 5; i++) {
  813.         rotate60 ('y', 4, h1);
  814.         rotate60 ('y', 4, h2);
  815.         rotate60 ('y', 3, h3);
  816.         getpolycolor (1, h1);
  817.         polf (4, h1);
  818.         getpolycolor (1, h2);
  819.         polf (4, h2);
  820.         getpolycolor (1, h3);
  821.         polf (3, h3);
  822.     }
  823.     phi += PI / 3.0;
  824.     getlightvector ();
  825.  
  826.     glDisable (GL_CULL_FACE);
  827.  
  828.  
  829.     glEndList ();
  830.     }
  831.  
  832.     glNewList (hip_shadow, GL_COMPILE);
  833.  
  834.     glShadeModel(GL_FLAT);
  835.  
  836.     /*glEnable (GL_CULL_FACE);*/
  837.     glIndexi (SHADOW_COLOR);
  838.     polf (4, h1);
  839.     polf (4, h2);
  840.     polf (3, h3);
  841.     for (i = 0; i < 5; i++) {
  842.     rotate60 ('y', 4, h1);
  843.     rotate60 ('y', 4, h2);
  844.     rotate60 ('y', 3, h3);
  845.     polf (4, h1);
  846.     polf (4, h2);
  847.     polf (3, h3);
  848.     }
  849.     /*glDisable (GL_CULL_FACE);*/
  850.     glEndList ();
  851.  
  852.     phi = 0.0;
  853.     theta = PI / 4.0;
  854.     getlightvector ();
  855.     for (j = 0; j < 6; j++) {
  856.       thigh[j] = thigh[0] + j;
  857.     glNewList (thigh[j], GL_COMPILE);
  858.  
  859.     glShadeModel(GL_FLAT);
  860.  
  861.     glEnable (GL_CULL_FACE);
  862.  
  863.  
  864.     getpolycolor (2, t1);
  865.     polf (4, t1);
  866.     getpolycolor (2, t2);
  867.     polf (3, t2);
  868.     getpolycolor (2, t3);
  869.     polf (3, t3);
  870.     getpolycolor (2, t4);
  871.     polf (3, t4);
  872.     getpolycolor (2, t5);
  873.     polf (3, t5);
  874.     getpolycolor (2, t6);
  875.     polf (3, t6);
  876.     getpolycolor (2, t7);
  877.     polf (3, t7);
  878.     getpolycolor (2, t8);
  879.     polf (4, t8);
  880.  
  881.     glDisable (GL_CULL_FACE);
  882.  
  883.  
  884.     glEndList ();
  885.     kneeball[j] = kneeball[0] + j;
  886.     glNewList (kneeball[j], GL_COMPILE);
  887.  
  888.     glShadeModel(GL_FLAT);
  889.  
  890.     glEnable (GL_CULL_FACE);
  891.  
  892.  
  893.     getpolycolor (3, k1);
  894.     polf (4, k1);
  895.     for (k = 0; k < 4; k++)
  896.         k1[k][1] -= 1.0;
  897.     rotate60 ('x', 4, k1);
  898.     for (k = 0; k < 4; k++)
  899.         k1[k][1] += 1.0;
  900.     for (i = 0; i < 5; i++) {
  901.         if (i != 0) {
  902.         getpolycolor (3, k1);
  903.         polf (4, k1);
  904.         }
  905.         for (k = 0; k < 4; k++)
  906.         k1[k][1] -= 1.0;
  907.         rotate60 ('x', 4, k1);
  908.         for (k = 0; k < 4; k++)
  909.         k1[k][1] += 1.0;
  910.     }
  911.     getpolycolor (3, k2);
  912.     polf (6, k2);
  913.     getpolycolor (3, k3);
  914.     polf (6, k3);
  915.  
  916.  
  917.     glDisable (GL_CULL_FACE);
  918.  
  919.  
  920.     glEndList ();
  921.     shin[j] = shin[0] + j;
  922.     glNewList (shin[j], GL_COMPILE);
  923.  
  924.     glShadeModel(GL_FLAT);
  925.  
  926.     glEnable (GL_CULL_FACE);
  927.  
  928.  
  929.     getpolycolor (4, s1);
  930.     polf (4, s1);
  931.     getpolycolor (4, s2);
  932.     polf (4, s2);
  933.     getpolycolor (4, s3);
  934.     polf (4, s3);
  935.     getpolycolor (4, s4);
  936.     polf (4, s4);
  937.     getpolycolor (4, s5);
  938.     polf (4, s5);
  939.  
  940.  
  941.     glDisable (GL_CULL_FACE);
  942.  
  943.  
  944.     glEndList ();
  945.     theta -= PI / 3.0;
  946.     getlightvector ();
  947.     }
  948.     glNewList (thigh_shadow, GL_COMPILE);
  949.  
  950.     glShadeModel(GL_FLAT);
  951.  
  952.     /*glEnable (GL_CULL_FACE);*/
  953.     glIndexi (SHADOW_COLOR);
  954.     polf (4, t1);
  955.     polf (3, t2);
  956.     polf (3, t3);
  957.     polf (3, t4);
  958.     polf (3, t5);
  959.     polf (3, t6);
  960.     polf (3, t7);
  961.     polf (4, t8);
  962.     /*glDisable (GL_CULL_FACE);*/
  963.     glEndList ();
  964.     glNewList (kneeball_shadow, GL_COMPILE);
  965.  
  966.     glShadeModel(GL_FLAT);
  967.  
  968.     /*glEnable (GL_CULL_FACE);*/
  969.     glIndexi (SHADOW_COLOR);
  970.     polf (4, k1);
  971.     for (k = 0; k < 4; k++)
  972.     k1[k][1] -= 1.0;
  973.     rotate60 ('x', 4, k1);
  974.     for (k = 0; k < 4; k++)
  975.     k1[k][1] += 1.0;
  976.     for (i = 0; i < 5; i++) {
  977.     if (i != 0) {
  978.         polf (4, k1);
  979.     }
  980.     for (k = 0; k < 4; k++)
  981.         k1[k][1] -= 1.0;
  982.     rotate60 ('x', 4, k1);
  983.     for (k = 0; k < 4; k++)
  984.         k1[k][1] += 1.0;
  985.     }
  986.     polf (6, k2);
  987.     polf (6, k3);
  988.     /*glDisable (GL_CULL_FACE);*/
  989.     glEndList ();
  990.     glNewList (shin_shadow, GL_COMPILE);
  991.  
  992.     glShadeModel(GL_FLAT);
  993.  
  994.     /*glEnable (GL_CULL_FACE);*/
  995.     glIndexi (SHADOW_COLOR);
  996.     polf (4, s1);
  997.     polf (4, s2);
  998.     polf (4, s3);
  999.     polf (4, s4);
  1000.     polf (4, s5);
  1001.     /*glDisable (GL_CULL_FACE);*/
  1002.     glEndList ();
  1003.  
  1004. }
  1005.